data load

library(dplyr)

Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union
library(data.table)
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
data.table 1.14.2 using 1 threads (see ?getDTthreads).  Latest news: r-datatable.com
**********
This installation of data.table has not detected OpenMP support. It should still work but in single-threaded mode.
This is a Mac. Please read https://mac.r-project.org/openmp/. Please engage with Apple and ask them for support. Check r-datatable.com for updates, and our Mac instructions here: https://github.com/Rdatatable/data.table/wiki/Installation. After several years of many reports of installation problems on Mac, it's time to gingerly point out that there have been no similar problems on Windows or Linux.
**********

Attaching package: ‘data.table’

The following objects are masked from ‘package:dplyr’:

    between, first, last
library(ggplot2)
library(ggmap)
Google's Terms of Service: https://cloud.google.com/maps-platform/terms/.
Please cite ggmap if you use it! See citation("ggmap") for details.
library(RColorBrewer)
library(leaflet)
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio
library(scales)
library(plotly)

Attaching package: ‘plotly’

The following object is masked from ‘package:ggmap’:

    wind

The following object is masked from ‘package:ggplot2’:

    last_plot

The following object is masked from ‘package:stats’:

    filter

The following object is masked from ‘package:graphics’:

    layout
library(rlist)
library(broom)

powerplants=read.csv('global_power_plant_database.csv')

powerplants[is.na(powerplants)] = 0
powerplantsCountry = powerplants %>% filter(country_long == "United States of America")

Data prep

powerplantsCountryFuel = powerplantsCountry %>% group_by(primary_fuel) 

powerplantsCountryFuelYear = powerplantsCountryFuel %>% summarise(energy2013 = 0.5* (sum(generation_gwh_2013) + sum(estimated_generation_gwh_2013)),
          energy2014 = 0.5* (sum(generation_gwh_2014) + sum(estimated_generation_gwh_2014)),
          energy2015 = 0.5* (sum(generation_gwh_2015) + sum(estimated_generation_gwh_2015)),
          energy2016 = 0.5* (sum(generation_gwh_2016) + sum(estimated_generation_gwh_2016)),
          energy2017 = 0.5* (sum(generation_gwh_2017) + sum(estimated_generation_gwh_2017)),
          )

powerplantsCountryFuelYearDF = as.data.frame(powerplantsCountryFuelYear)
powerplantsCountryFuelYearLabeled = powerplantsCountryFuelYearDF[,-1]
row.names(powerplantsCountryFuelYearLabeled) = powerplantsCountryFuelYearDF[,1]
transposePowerplantsCountryFuelYear = transpose(powerplantsCountryFuelYearLabeled)
colnames(transposePowerplantsCountryFuelYear) = powerplantsCountryFuelYearDF[,1]
transposePowerplantsCountryFuelYear$Year = c(2013,2014,2015,2016,2017)


totalEnergy = powerplantsCountryFuelYear %>% mutate(total = energy2013+ energy2014 +energy2015 + energy2016 + energy2017)

map

powertype = "Wind"
leaflet(powerplants %>% filter(primary_fuel == powertype)) %>% addTiles() %>% addMarkers(~longitude,~latitude,popup= ~primary_fuel,label= ~name)

Total energy bar chart

totalEnergyChart=ggplot(totalEnergy,aes(x=reorder(primary_fuel,total),y=total,fill=primary_fuel)) + geom_bar(stat="identity") + coord_flip() + scale_y_continuous(trans= 'log10', labels = trans_format('log10',math_format(10^.x))) + theme(axis.text.x = element_text(angle=90)) + ylab("Energy Accumulated MWH") + xlab("Primary Fuel")
totalEnergyChart

energy produced


data_long = melt(transposePowerplantsCountryFuelYear, id="Year")
Warning in melt(transposePowerplantsCountryFuelYear, id = "Year") :
  The melt generic in data.table has been passed a data.frame and will attempt to redirect to the relevant reshape2 method; please note that reshape2 is deprecated, and this redirection is now deprecated as well. To continue using melt methods from reshape2 while both libraries are attached, e.g. melt.list, you can prepend the namespace like reshape2::melt(transposePowerplantsCountryFuelYear). In the next version, this warning will become an error.
colnames(data_long) = c("Year","primary_fuel","energy")

lineplot = ggplot(data_long, aes(x=Year,y=energy, color= primary_fuel)) + ylab("Energy Produced MWH") + xlab("Year") + geom_line() + scale_y_continuous(trans= 'log10', labels = trans_format('log10',math_format(10^.x))) +ggtitle("Energy Produced over the Years per Type")

ggplotly(lineplot)
Warning in is.na(ticktext) :
  is.na() applied to non-(list or vector) of type 'expression'

number of plants by type

numberOfPlants = powerplantsCountryFuel %>% summarize(number = n())
ggplot(numberOfPlants,aes(x=reorder(primary_fuel,number), y=number,fill=primary_fuel)) + geom_bar(stat="identity") + theme(axis.text.x = element_text(angle=90)) + coord_flip() + scale_y_continuous(trans= 'log10', labels = trans_format('log10',math_format(10^.x))) + xlab("Primary Fuel") + ylab("Number of Plants") +ggtitle("Number of Plants per Type")

powerplantsCountryFuelAndNumber = merge(totalEnergy,numberOfPlants,"primary_fuel","primary_fuel")
powerplantsCountryFuelAndNumber = powerplantsCountryFuelAndNumber %>% mutate(EnergyPerPlant = total/number)

totalEnergyPerPlantChart=ggplot(powerplantsCountryFuelAndNumber,aes(x=reorder(primary_fuel,EnergyPerPlant),y=EnergyPerPlant,fill=primary_fuel)) + geom_bar(stat="identity") + coord_flip() + scale_y_continuous(trans= 'log10', labels = trans_format('log10',math_format(10^.x))) + theme(axis.text.x = element_text(angle=90)) + ylab("Average Energy Accumulated MWH per Plant") + xlab("Primary Fuel")
totalEnergyPerPlantChart

powerplantsCountryFuelTotal = powerplantsCountryFuel %>%
  mutate(totalEnergy = 0.5 * (
    generation_gwh_2013 + estimated_generation_gwh_2013 +
    generation_gwh_2014 + estimated_generation_gwh_2014 +
    generation_gwh_2015 + estimated_generation_gwh_2015 +
    generation_gwh_2016 + estimated_generation_gwh_2016 +
    generation_gwh_2017 + estimated_generation_gwh_2017
    ))
totalEnergyBoxPlot = ggplot(powerplantsCountryFuelTotal,aes(x=reorder(primary_fuel,totalEnergy),y=totalEnergy,fill=primary_fuel)) + geom_boxplot(show.legend = FALSE) + coord_flip() + scale_y_continuous(trans= 'log10', labels = trans_format('log10',math_format(10^.x))) + theme(axis.text.x = element_text(angle=90)) + ylab("Average Energy Accumulated MWH per Plant") + xlab("Primary Fuel")
totalEnergyBoxPlot
Warning in self$trans$transform(x) : NaNs produced
Warning: Transformation introduced infinite values in continuous y-axis
Warning: Removed 117 rows containing non-finite values (stat_boxplot).

windPowerplants = powerplantsCountryFuelTotal %>% filter(primary_fuel == "Wind")
oilPowerplants = powerplantsCountryFuelTotal %>% filter(primary_fuel == "Oil")

# Compute the analysis of variance
res.aov <- aov(totalEnergy ~ primary_fuel, data = powerplantsCountryFuelTotal)
# Summary of the analysis
summary(res.aov)
               Df    Sum Sq   Mean Sq F value Pr(>F)    
primary_fuel   13 1.253e+11 9.641e+09     762 <2e-16 ***
Residuals    9819 1.242e+11 1.265e+07                   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
thsd = TukeyHSD(res.aov, "primary_fuel", ordered = TRUE)
tidy(thsd) %>% filter(contrast=="Wind-Oil")
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQpkYXRhIGxvYWQKYGBge3J9CmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoZGF0YS50YWJsZSkKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KGdnbWFwKQpsaWJyYXJ5KFJDb2xvckJyZXdlcikKbGlicmFyeShsZWFmbGV0KQpsaWJyYXJ5KHNjYWxlcykKbGlicmFyeShwbG90bHkpCmxpYnJhcnkocmxpc3QpCmxpYnJhcnkoYnJvb20pCgpwb3dlcnBsYW50cz1yZWFkLmNzdignZ2xvYmFsX3Bvd2VyX3BsYW50X2RhdGFiYXNlLmNzdicpCgpwb3dlcnBsYW50c1tpcy5uYShwb3dlcnBsYW50cyldID0gMApwb3dlcnBsYW50c0NvdW50cnkgPSBwb3dlcnBsYW50cyAlPiUgZmlsdGVyKGNvdW50cnlfbG9uZyA9PSAiVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIikKYGBgCkRhdGEgcHJlcApgYGB7cn0KcG93ZXJwbGFudHNDb3VudHJ5RnVlbCA9IHBvd2VycGxhbnRzQ291bnRyeSAlPiUgZ3JvdXBfYnkocHJpbWFyeV9mdWVsKSAKCnBvd2VycGxhbnRzQ291bnRyeUZ1ZWxZZWFyID0gcG93ZXJwbGFudHNDb3VudHJ5RnVlbCAlPiUgc3VtbWFyaXNlKGVuZXJneTIwMTMgPSAwLjUqIChzdW0oZ2VuZXJhdGlvbl9nd2hfMjAxMykgKyBzdW0oZXN0aW1hdGVkX2dlbmVyYXRpb25fZ3doXzIwMTMpKSwKICAgICAgICAgIGVuZXJneTIwMTQgPSAwLjUqIChzdW0oZ2VuZXJhdGlvbl9nd2hfMjAxNCkgKyBzdW0oZXN0aW1hdGVkX2dlbmVyYXRpb25fZ3doXzIwMTQpKSwKICAgICAgICAgIGVuZXJneTIwMTUgPSAwLjUqIChzdW0oZ2VuZXJhdGlvbl9nd2hfMjAxNSkgKyBzdW0oZXN0aW1hdGVkX2dlbmVyYXRpb25fZ3doXzIwMTUpKSwKICAgICAgICAgIGVuZXJneTIwMTYgPSAwLjUqIChzdW0oZ2VuZXJhdGlvbl9nd2hfMjAxNikgKyBzdW0oZXN0aW1hdGVkX2dlbmVyYXRpb25fZ3doXzIwMTYpKSwKICAgICAgICAgIGVuZXJneTIwMTcgPSAwLjUqIChzdW0oZ2VuZXJhdGlvbl9nd2hfMjAxNykgKyBzdW0oZXN0aW1hdGVkX2dlbmVyYXRpb25fZ3doXzIwMTcpKSwKICAgICAgICAgICkKCnBvd2VycGxhbnRzQ291bnRyeUZ1ZWxZZWFyREYgPSBhcy5kYXRhLmZyYW1lKHBvd2VycGxhbnRzQ291bnRyeUZ1ZWxZZWFyKQpwb3dlcnBsYW50c0NvdW50cnlGdWVsWWVhckxhYmVsZWQgPSBwb3dlcnBsYW50c0NvdW50cnlGdWVsWWVhckRGWywtMV0Kcm93Lm5hbWVzKHBvd2VycGxhbnRzQ291bnRyeUZ1ZWxZZWFyTGFiZWxlZCkgPSBwb3dlcnBsYW50c0NvdW50cnlGdWVsWWVhckRGWywxXQp0cmFuc3Bvc2VQb3dlcnBsYW50c0NvdW50cnlGdWVsWWVhciA9IHRyYW5zcG9zZShwb3dlcnBsYW50c0NvdW50cnlGdWVsWWVhckxhYmVsZWQpCmNvbG5hbWVzKHRyYW5zcG9zZVBvd2VycGxhbnRzQ291bnRyeUZ1ZWxZZWFyKSA9IHBvd2VycGxhbnRzQ291bnRyeUZ1ZWxZZWFyREZbLDFdCnRyYW5zcG9zZVBvd2VycGxhbnRzQ291bnRyeUZ1ZWxZZWFyJFllYXIgPSBjKDIwMTMsMjAxNCwyMDE1LDIwMTYsMjAxNykKCgp0b3RhbEVuZXJneSA9IHBvd2VycGxhbnRzQ291bnRyeUZ1ZWxZZWFyICU+JSBtdXRhdGUodG90YWwgPSBlbmVyZ3kyMDEzKyBlbmVyZ3kyMDE0ICtlbmVyZ3kyMDE1ICsgZW5lcmd5MjAxNiArIGVuZXJneTIwMTcpCgpgYGAKCm1hcApgYGB7cn0KcG93ZXJ0eXBlID0gIldpbmQiCmxlYWZsZXQocG93ZXJwbGFudHMgJT4lIGZpbHRlcihwcmltYXJ5X2Z1ZWwgPT0gcG93ZXJ0eXBlKSkgJT4lIGFkZFRpbGVzKCkgJT4lIGFkZE1hcmtlcnMofmxvbmdpdHVkZSx+bGF0aXR1ZGUscG9wdXA9IH5wcmltYXJ5X2Z1ZWwsbGFiZWw9IH5uYW1lKQpgYGAKClRvdGFsIGVuZXJneSBiYXIgY2hhcnQKYGBge3J9CnRvdGFsRW5lcmd5Q2hhcnQ9Z2dwbG90KHRvdGFsRW5lcmd5LGFlcyh4PXJlb3JkZXIocHJpbWFyeV9mdWVsLHRvdGFsKSx5PXRvdGFsLGZpbGw9cHJpbWFyeV9mdWVsKSkgKyBnZW9tX2JhcihzdGF0PSJpZGVudGl0eSIpICsgY29vcmRfZmxpcCgpICsgc2NhbGVfeV9jb250aW51b3VzKHRyYW5zPSAnbG9nMTAnLCBsYWJlbHMgPSB0cmFuc19mb3JtYXQoJ2xvZzEwJyxtYXRoX2Zvcm1hdCgxMF4ueCkpKSArIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkgKyB5bGFiKCJFbmVyZ3kgQWNjdW11bGF0ZWQgTVdIIikgKyB4bGFiKCJQcmltYXJ5IEZ1ZWwiKQp0b3RhbEVuZXJneUNoYXJ0CmBgYAoKZW5lcmd5IHByb2R1Y2VkCmBgYHtyfQoKZGF0YV9sb25nID0gbWVsdCh0cmFuc3Bvc2VQb3dlcnBsYW50c0NvdW50cnlGdWVsWWVhciwgaWQ9IlllYXIiKQpjb2xuYW1lcyhkYXRhX2xvbmcpID0gYygiWWVhciIsInByaW1hcnlfZnVlbCIsImVuZXJneSIpCgpsaW5lcGxvdCA9IGdncGxvdChkYXRhX2xvbmcsIGFlcyh4PVllYXIseT1lbmVyZ3ksIGNvbG9yPSBwcmltYXJ5X2Z1ZWwpKSArIHlsYWIoIkVuZXJneSBQcm9kdWNlZCBNV0giKSArIHhsYWIoIlllYXIiKSArIGdlb21fbGluZSgpICsgc2NhbGVfeV9jb250aW51b3VzKHRyYW5zPSAnbG9nMTAnLCBsYWJlbHMgPSB0cmFuc19mb3JtYXQoJ2xvZzEwJyxtYXRoX2Zvcm1hdCgxMF4ueCkpKSArZ2d0aXRsZSgiRW5lcmd5IFByb2R1Y2VkIG92ZXIgdGhlIFllYXJzIHBlciBUeXBlIikKCmdncGxvdGx5KGxpbmVwbG90KQpgYGAKCm51bWJlciBvZiBwbGFudHMgYnkgdHlwZQpgYGB7cn0KbnVtYmVyT2ZQbGFudHMgPSBwb3dlcnBsYW50c0NvdW50cnlGdWVsICU+JSBzdW1tYXJpemUobnVtYmVyID0gbigpKQpnZ3Bsb3QobnVtYmVyT2ZQbGFudHMsYWVzKHg9cmVvcmRlcihwcmltYXJ5X2Z1ZWwsbnVtYmVyKSwgeT1udW1iZXIsZmlsbD1wcmltYXJ5X2Z1ZWwpKSArIGdlb21fYmFyKHN0YXQ9ImlkZW50aXR5IikgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCkpICsgY29vcmRfZmxpcCgpICsgc2NhbGVfeV9jb250aW51b3VzKHRyYW5zPSAnbG9nMTAnLCBsYWJlbHMgPSB0cmFuc19mb3JtYXQoJ2xvZzEwJyxtYXRoX2Zvcm1hdCgxMF4ueCkpKSArIHhsYWIoIlByaW1hcnkgRnVlbCIpICsgeWxhYigiTnVtYmVyIG9mIFBsYW50cyIpICtnZ3RpdGxlKCJOdW1iZXIgb2YgUGxhbnRzIHBlciBUeXBlIikKYGBgCgpgYGB7cn0KcG93ZXJwbGFudHNDb3VudHJ5RnVlbEFuZE51bWJlciA9IG1lcmdlKHRvdGFsRW5lcmd5LG51bWJlck9mUGxhbnRzLCJwcmltYXJ5X2Z1ZWwiLCJwcmltYXJ5X2Z1ZWwiKQpwb3dlcnBsYW50c0NvdW50cnlGdWVsQW5kTnVtYmVyID0gcG93ZXJwbGFudHNDb3VudHJ5RnVlbEFuZE51bWJlciAlPiUgbXV0YXRlKEVuZXJneVBlclBsYW50ID0gdG90YWwvbnVtYmVyKQoKdG90YWxFbmVyZ3lQZXJQbGFudENoYXJ0PWdncGxvdChwb3dlcnBsYW50c0NvdW50cnlGdWVsQW5kTnVtYmVyLGFlcyh4PXJlb3JkZXIocHJpbWFyeV9mdWVsLEVuZXJneVBlclBsYW50KSx5PUVuZXJneVBlclBsYW50LGZpbGw9cHJpbWFyeV9mdWVsKSkgKyBnZW9tX2JhcihzdGF0PSJpZGVudGl0eSIpICsgY29vcmRfZmxpcCgpICsgc2NhbGVfeV9jb250aW51b3VzKHRyYW5zPSAnbG9nMTAnLCBsYWJlbHMgPSB0cmFuc19mb3JtYXQoJ2xvZzEwJyxtYXRoX2Zvcm1hdCgxMF4ueCkpKSArIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkgKyB5bGFiKCJBdmVyYWdlIEVuZXJneSBBY2N1bXVsYXRlZCBNV0ggcGVyIFBsYW50IikgKyB4bGFiKCJQcmltYXJ5IEZ1ZWwiKQp0b3RhbEVuZXJneVBlclBsYW50Q2hhcnQKYGBgCgpgYGB7cn0KcG93ZXJwbGFudHNDb3VudHJ5RnVlbFRvdGFsID0gcG93ZXJwbGFudHNDb3VudHJ5RnVlbCAlPiUKICBtdXRhdGUodG90YWxFbmVyZ3kgPSAwLjUgKiAoCiAgICBnZW5lcmF0aW9uX2d3aF8yMDEzICsgZXN0aW1hdGVkX2dlbmVyYXRpb25fZ3doXzIwMTMgKwogICAgZ2VuZXJhdGlvbl9nd2hfMjAxNCArIGVzdGltYXRlZF9nZW5lcmF0aW9uX2d3aF8yMDE0ICsKICAgIGdlbmVyYXRpb25fZ3doXzIwMTUgKyBlc3RpbWF0ZWRfZ2VuZXJhdGlvbl9nd2hfMjAxNSArCiAgICBnZW5lcmF0aW9uX2d3aF8yMDE2ICsgZXN0aW1hdGVkX2dlbmVyYXRpb25fZ3doXzIwMTYgKwogICAgZ2VuZXJhdGlvbl9nd2hfMjAxNyArIGVzdGltYXRlZF9nZW5lcmF0aW9uX2d3aF8yMDE3CiAgICApKQp0b3RhbEVuZXJneUJveFBsb3QgPSBnZ3Bsb3QocG93ZXJwbGFudHNDb3VudHJ5RnVlbFRvdGFsLGFlcyh4PXJlb3JkZXIocHJpbWFyeV9mdWVsLHRvdGFsRW5lcmd5KSx5PXRvdGFsRW5lcmd5LGZpbGw9cHJpbWFyeV9mdWVsKSkgKyBnZW9tX2JveHBsb3Qoc2hvdy5sZWdlbmQgPSBGQUxTRSkgKyBjb29yZF9mbGlwKCkgKyBzY2FsZV95X2NvbnRpbnVvdXModHJhbnM9ICdsb2cxMCcsIGxhYmVscyA9IHRyYW5zX2Zvcm1hdCgnbG9nMTAnLG1hdGhfZm9ybWF0KDEwXi54KSkpICsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGU9OTApKSArIHlsYWIoIkF2ZXJhZ2UgRW5lcmd5IEFjY3VtdWxhdGVkIE1XSCBwZXIgUGxhbnQiKSArIHhsYWIoIlByaW1hcnkgRnVlbCIpCnRvdGFsRW5lcmd5Qm94UGxvdApgYGAKYGBge3J9CndpbmRQb3dlcnBsYW50cyA9IHBvd2VycGxhbnRzQ291bnRyeUZ1ZWxUb3RhbCAlPiUgZmlsdGVyKHByaW1hcnlfZnVlbCA9PSAiV2luZCIpCm9pbFBvd2VycGxhbnRzID0gcG93ZXJwbGFudHNDb3VudHJ5RnVlbFRvdGFsICU+JSBmaWx0ZXIocHJpbWFyeV9mdWVsID09ICJPaWwiKQoKIyBDb21wdXRlIHRoZSBhbmFseXNpcyBvZiB2YXJpYW5jZQpyZXMuYW92IDwtIGFvdih0b3RhbEVuZXJneSB+IHByaW1hcnlfZnVlbCwgZGF0YSA9IHBvd2VycGxhbnRzQ291bnRyeUZ1ZWxUb3RhbCkKIyBTdW1tYXJ5IG9mIHRoZSBhbmFseXNpcwpzdW1tYXJ5KHJlcy5hb3YpCmBgYApgYGB7cn0KdGhzZCA9IFR1a2V5SFNEKHJlcy5hb3YsICJwcmltYXJ5X2Z1ZWwiLCBvcmRlcmVkID0gVFJVRSkKdGlkeSh0aHNkKSAlPiUgZmlsdGVyKGNvbnRyYXN0PT0iV2luZC1PaWwiKQpgYGA=